package dssd.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

import dssd.modelo.Conductor;
import dssd.modelo.Solicitud;
import dssd.modelo.Usuario;

public class ConductorDao extends AbstractDao {
	
	public Conductor guardarConductor(Conductor conductor){
		return (Conductor)super.save(conductor);
	}
	
	public Conductor actualizarConductor(Conductor conductor){
		return (Conductor)super.update(conductor);
	}
	
	public Solicitud verSolicitudPendiente(long idConductor){
		return null;
	}

	public Conductor buscarPorDni(String dni) {
		Conductor conductor = null;
		DetachedCriteria criteria = DetachedCriteria.forClass(Usuario.class);
		criteria.add(Restrictions.eq("dni", dni));
		List<Usuario> listResult = super.search(criteria);
		if (!listResult.isEmpty()){
			Usuario usuario = listResult.get(0);
			conductor = this.buscarPorIdUsuario(usuario.getId());
		}
		return conductor;
	}

	public List<Conductor> buscarPorApellido(String apellido) {
		DetachedCriteria criteria = DetachedCriteria.forClass(Usuario.class);
		criteria.add(Restrictions.eq("apellido", apellido));
		List<Usuario> usuarios = super.search(criteria);
		List<Conductor> conductores = new ArrayList<Conductor>();
		for (Usuario usuario : usuarios){
			Conductor conductor = this.buscarPorIdUsuario(usuario.getId());
			if (conductor != null) conductores.add(conductor);
		}
		return conductores;
	}
	
	private List<Conductor> buscarPorAtributo(String campo, String valor){
		DetachedCriteria criteria = DetachedCriteria.forClass(Conductor.class);
		criteria.add(Restrictions.eq(campo, valor));
		List<Conductor> listResult = super.search(criteria);
		return listResult;
	}
	private List<Conductor> buscarPorAtributo(String campo, Long valor){
		DetachedCriteria criteria = DetachedCriteria.forClass(Conductor.class);
		criteria.add(Restrictions.eq(campo, valor));
		List<Conductor> listResult = super.search(criteria);
		return listResult;
	}
	public Conductor buscarPorIdUsuario(Long id) {
		List<Conductor> listResult = this.buscarPorAtributo("usuario.id", id);
		if (listResult.isEmpty()){
			return null;
		}else{
			return listResult.get(0);
		}
	}
} 